package com.ynkbny.web.controller;


import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ynkbny.base.PageResult;
import com.ynkbny.domain.dto.TEpDataCollectConfigureDTO;
import com.ynkbny.domain.excel.DatacollectconfigureExportVO;
import com.ynkbny.domain.excel.TEpTotalEnergyExportVO;
import com.ynkbny.domain.pojo.TEpDataCollectConfigureAddVO;
import com.ynkbny.service.TEpDataCollectConfigureService;
import com.ynkbny.util.Res;
import com.ynkbny.util.easyExcel.EasyExcelUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * @Author YY
 * @Date 2023-07-05 10:17
 */
@Slf4j
@Api(tags = "用能单位数据采集配置项信息表对象功能接口")
@RestController
@RequestMapping("/datacollectconfigure")
public class TEpDataCollectConfigureController {

    @Autowired
    private TEpDataCollectConfigureService tEpDatacollectconfigureService;

    /**
     * 用能单位数据采集配置项信息 分页查询
     * @Author YY
     * @param pageNum 页码
     * @param pageSize 单页数量
     * @param condition 查询条件
     */
    @ApiOperation("查询分页数据")
    @GetMapping("/pageList")
    public Res<PageResult<TEpDataCollectConfigureDTO>> pageList(Long pageNum,Long pageSize,String condition) {
        log.info("请求参数:{},{},{}", pageNum, pageSize, condition);
        Page<TEpDataCollectConfigureDTO> pageModel = (Page<TEpDataCollectConfigureDTO>) tEpDatacollectconfigureService.selectByPage(pageNum, pageSize, condition);

        PageResult<TEpDataCollectConfigureDTO> dtoPageResult = new PageResult<>(pageModel);
        log.info("返回值：{}",dtoPageResult);
        return Res.ok(dtoPageResult);
    }

    /**
     * 根据企业社会信用代码查询采集配置项列表 分页查询(能耗对接录入模块调用)
     * @Author xx
     * @param pageNum 页码
     * @param pageSize 单页数量
     * @param conditionJson 查询条件
     */
    @ApiOperation("根据企业社会信用代码查询分页数据")
    @GetMapping("/getList")
    public Res<PageResult<TEpDataCollectConfigureDTO>> getList(@RequestParam(name = "pageNum", required = false, defaultValue = "1") long pageNum,
                                                               @RequestParam(name = "pageSize", required = false, defaultValue = "15") long pageSize,
                                                               @RequestParam(name = "condition", required = false) String conditionJson) {
        PageResult<TEpDataCollectConfigureDTO> dtoPageResult = tEpDatacollectconfigureService.getListByEnterpriseCode(pageNum, pageSize, conditionJson);
        return Res.ok(dtoPageResult);
    }

    /**
     * 用能单位数据采集配置项信息 通过ID查询单条数据
     * @Author YY
     * @param id id
     * @return Res<TEpDataCollectConfigureDTO>
     */
    @ApiOperation("通过ID查询单条数据")
    @GetMapping("{id}")
    public Res<TEpDataCollectConfigureDTO> getOneById(@PathVariable String id) {
        log.info("请求参数:{}", id);
        TEpDataCollectConfigureDTO oneById = tEpDatacollectconfigureService.getOneById(id);
        log.info("返回值：{}",oneById);
        return Res.ok(oneById);
    }

    /**
     * 用能单位数据采集配置项信息 根据ID修改
     * @Author YY
     * @param tEpDatacollectconfigureDTO tEpDatacollectconfigureDTO
     * @return Res<Boolean>
     */
    @ApiOperation("根据ID修改")
    @PostMapping("/update")
    public Res<Boolean> updateOneById(@RequestBody TEpDataCollectConfigureDTO tEpDatacollectconfigureDTO) {
        log.info("请求参数:{}", tEpDatacollectconfigureDTO.toString());
        boolean update = tEpDatacollectconfigureService.updateOneById(tEpDatacollectconfigureDTO);
        log.info("返回值：{}",update);
        return Res.ok(update);
    }

    /**
     * 用能单位数据采集配置项信息 上报
     * @Author YY
     * @param tEpDatacollectconfigureDTO 用能单位数据采集配置项信息 对象
     * @return Res对象
     */
    @ApiOperation("单条用能单位数据采集配置项信息上报")
    @PostMapping("/upload")
    public Res<Boolean> uploadOneById(@RequestBody TEpDataCollectConfigureDTO tEpDatacollectconfigureDTO) {
        log.info("请求参数:{}", tEpDatacollectconfigureDTO.toString());
        boolean upload = tEpDatacollectconfigureService.uploadOneById(tEpDatacollectconfigureDTO);
        log.info("返回值：{}",upload);
        return Res.ok(upload);
    }

    /**
     * 根据 1.社会信用 and 2.能源分类 + 分项 查询 属于此企业的List
     * @Author juzipi123
     * @param enterpriseCode 社会信用代码
     * @param energyTypeCode 能源分类 + 分项 目前只做电所以请前段传 3300
     * @return list
     */
    @ApiOperation("根据 社会信用,且是电的 查询 属于此企业的List")
    @GetMapping("/getByEnterpriseCodeList")
    public Res<List<TEpDataCollectConfigureDTO>> getByEnterpriseCodeList(String enterpriseCode,String energyTypeCode) {
        log.info("请求参数:{},{}", enterpriseCode, energyTypeCode);
        List<TEpDataCollectConfigureDTO> byEnterpriseCodeList = tEpDatacollectconfigureService.getByEnterpriseCodeList(enterpriseCode, energyTypeCode);
        log.info("返回值：{}",byEnterpriseCodeList.toString());
        return Res.ok(byEnterpriseCodeList);
    }

    /**
     * 新增或修改
     * @Author YY
     * @param dto TEpDataCollectConfigureAddVO
     * @return Res.ok(update)
     */
    @ApiOperation("新增或修改")
    @PostMapping("/add")
    public Res<Boolean> saveEnterprise(@RequestBody TEpDataCollectConfigureAddVO dto) {
        log.info("请求参数:{}", dto.toString());
        TEpDataCollectConfigureDTO configureDTO = new TEpDataCollectConfigureDTO();
        BeanUtils.copyProperties(dto,configureDTO);
        configureDTO.setDicVersion("1.0版本");
        configureDTO.setRegVersion("1.0版本");
        boolean update = tEpDatacollectconfigureService.saveOrUpdate(configureDTO);
        log.info("返回值：{}",update);
        return Res.ok(update);
    }

    /**
     * 通过id删除
     * @Author YY
     * @param id id
     * @return Boolean
     */
    @ApiOperation("通过id删除")
    @PostMapping("/delete/{id}")
    public Res<Boolean> deleteById(@PathVariable String id) {
        log.info("请求参数:{}", id);
        boolean remove = tEpDatacollectconfigureService.removeById(id);
        log.info("返回值：{}",remove);
        return Res.ok(remove);
    }


    /**
     * excel导出 模板
     * @Author juzipi123
     * @param response 导出文件
     * @param enterpriseCode 统一社会信用代码
     */
    @ApiOperation("excel导出 模板")
    @GetMapping("/exportExcelTemplate")
    public void exportExcelTemplate(HttpServletResponse response, String enterpriseCode) throws IOException {
        log.info("请求参数:{},{}", response.toString(),enterpriseCode);
        List<TEpTotalEnergyExportVO> list = tEpDatacollectconfigureService.exportExcelTemplate(enterpriseCode);
        if(ObjectUtils.isEmpty(list)) {
            list.add(new TEpTotalEnergyExportVO());
        }
        EasyExcelUtils.writeWeb("模板_"+enterpriseCode, list, response);
    }

    /**
     * excel导出 模板
     * @Author juzipi123
     * @param enterpriseCode 统一社会信用代码
     * @param statDate 数据统计时间
     * @param inputType 数据采集类型(1：管理信息系统 2：生产监控管理系统 3：分布式控制系统 4：现场仪表 5：手工填报 6：能源供应单位 7：其他)
     */
    @ApiOperation("excel导出 模板")
    @GetMapping("/exportExcelTemplateV2")
    public void exportExcelTemplateV2(HttpServletResponse response, String enterpriseCode, String statDate,String inputType) throws IOException {
        log.info("请求参数:{},{}", response.toString(),enterpriseCode);
        List<DatacollectconfigureExportVO> list = tEpDatacollectconfigureService.exportExcelTemplateV2( enterpriseCode, statDate, inputType);
        if(ObjectUtils.isEmpty(list)) {
            list.add(new DatacollectconfigureExportVO());
        }
        EasyExcelUtils.writeWeb("模板_"+enterpriseCode, list, response);
    }
}
